package com.wb.shuzu.lianxi;
import java.util.Arrays;
/**
 * @author 黄衡熙
 * @version 1.0
 * @date 2025年07月16日16:48
 */
public class Test {
    public static void main(String[] args) {
        int[] nums = {1, 3, 5, 7, 9};
        int[] dist = new int[5];
        copyArray(nums, dist);
        System.out.println(Arrays.toString(dist));
        show(nums);
        change(nums,3,1);
        reverse(nums);
        createArray(5,1,5);
    }

    /**
     * 实现复制数组的方法,将源数组的所有元素复制到目标数组中。两个参数:源数组,目标数组
     *
     * @param src  源数组
     * @param dist 目标数组
     */
    public static void copyArray(int[] src, int[] dist) {
        // 两个数组元素的长度必须是一致的,否则无法复制
        if (src.length != dist.length) {
            System.out.println("错误:两个数组元素的数量不一致,无法复制");
            return;
        }
        // 遍历数组
        for (int i = 0; i < src.length; i++) {
            // 每遍历一个元素,都将该元素的值赋值给目标数组对应下标的值
            dist[i] = src[i];
        }
    }

    /**
     * 实现输出数组中元素的功能,要求数组的元素以短横杠-分隔
     *
     * @param arr 需要打印的数组
     */
    public static void show(int[] arr) {
        System.out.print("以短横杠输出的数组元素为:[");
        for (int i = 0; i < arr.length; i++) {
            if (i < arr.length - 1) {
                System.out.print(arr[i] + "-");
            } else {
                System.out.println(arr[i]+"]");
            }

        }
    }

        /**
         * 交换指定数组中指定位置的两个元素的值
         * @param arr
         * @param i
         * @param j
         */
        public static void change ( int[] arr, int i, int j){
            int temp=0;
            temp=arr[i-1];
            arr[i-1]=arr[j-1];
            arr[j-1]=temp;
            System.out.println("交换后指定位置后的数据位:"+Arrays.toString(arr));

        }

        /**
         * 将指定数组的所有元素颠倒过来,倒序
         * @param arr
         */
        public static void reverse ( int[] arr){
            System.out.print("颠倒后的数据为:[");
            for (int i = arr.length-1; i >=0; i--) {
                if(i>0) {
                    System.out.print(arr[i] + " ");
                }else{
                    System.out.print(arr[i]+"]");
                }
            }
            System.out.println();

        }

        /**
         * 随机生成一个int类型的数组,通过方法的参数控制数组的长度、以及取值范围
         * 其值为指定范围x-y之间的整数,且数组元素的值不能重复。参数有三个:数组长度、最小值、最大值
         * @param length 数组长度
         * @param min    元素的最小值
         * @param max    元素的最大值
         */
        public static void createArray ( int length, int min, int max){
            int[] arr = new int[length];
            for (int i = 0; i < length; i++) {
                int a = (int) ((Math.random() * (max + 1 - min)) + min);
                boolean flag = contains(arr, a);
                if (!flag) {
                    arr[i] = a;
                } else {
                    i--;
                }
            }
            System.out.print("生成的随机数组:");
           /* for(int i=0; i<length;i++) {
                System.out.print(arr[i]+" ");
            }*/
            System.out.println(Arrays.toString(arr));
        }
    public static boolean contains(int[] arr,int a){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==a){
                return true;
            }
        }
        return false;
    }
    }

